// 用户表
const { DB, Sequelize } = require('../database/DBinit');
const { DataTypes } = Sequelize;
const Role = require('./Role');

/**
 * @param {*} userName 用户信息模型  blog_users
 * user_phone
 * user_password
 * user_nickname
 * user_avatar
 * user_name
 * user_email
 * user_age
 * user_description
 * user_birthday
 * user_role
 */

const User = DB.define(
  'users',
  {
    // 手机号
    phone: {
      field: 'phone',
      type: DataTypes.BIGINT(11), // 11位数字
      allowNull: false, // 是否为null，默认为trues
      comment: '手机号',
    },
    // 密码
    pwd: {
      field: 'pwd',
      type: DataTypes.STRING(32),
      allowNull: false, // 是否为null，默认为trues
      comment: '密码',
    },
    // 用户名
    name: {
      field: 'name',
      type: DataTypes.STRING, // 约束类型
      allowNull: false, // 是否为null，默认为trues
      comment: '用户名',
    },
    // 昵称
    nickname: {
      field: 'nickname',
      type: DataTypes.STRING,
      allowNull: true, // 是否为null，默认为trues
      comment: '昵称',
    },

    // 邮箱
    email: {
      field: 'email',
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
      comment: '邮箱',
    },
    // 头像
    avatar: {
      field: 'avatar',
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
      comment: '头像',
    },

    // 年龄
    age: {
      field: 'age',
      type: DataTypes.INTEGER,
      allowNull: true,
      defaultValue: 18,
      comment: '年龄',
    },
    // 年龄
    sex: {
      field: 'sex',
      type: DataTypes.INTEGER,
      allowNull: true,
      defaultValue: 0,
      comment: '性别',
    },
    // 签名
    description: {
      field: 'description',
      type: DataTypes.STRING,
      allowNull: true,
      defaultValue: '',
      comment: '签名',
    },
    // 角色权限关联模型Role
    role: {
      field: 'role',
      type: DataTypes.INTEGER,
      allowNull: true,
      comment: '角色权限',
      references: {
        model: Role,
        key: 'id',
        onDelete: 'CASCADE', // 添加删除约束
        onUpdate: 'CASCADE', // 添加更新约束
      },
    },
  },
  {
    // 不要忘记启用时间戳！
    timestamps: true,
    updatedAt: true,
    createdAt: true, //创建时间
    tableName: 'users', // 表名称
    comment: '用户表',
  }
);

// 同步模型
// alter: true  // 文档  [https://www.sequelize.com.cn/core-concepts/model-basics#%E4%BD%BF%E7%94%A8-sequelizedefine]

// 一个用户只能有一个角色
User.belongsTo(Role, {
  foreignKey: 'role',
  targetKey: 'id',
  as: 'roleInfo',
});

module.exports = User;
